package ejb.managerbeans;

import javax.ejb.Stateless;

import ejb.dto.EscursioneDTO;
import ejb.entities.*;
import ejb.utility.ConvertDTO;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;
import javax.ejb.EJBContext;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 * Session Bean implementation class HotelManagerBean
 */
@Stateless
public class EscursioneManagerBean implements EscursioneManagerBeanLocal {

	@PersistenceContext
	private EntityManager em;

	@Resource
	private EJBContext context;

	/**
	 * Default constructor.
	 */
	public EscursioneManagerBean() {

	}

	public List<Escursion> getAllEscursions() {

		return em.createNamedQuery(Escursion.FIND_ALL, Escursion.class)
				.getResultList();

	}

	@Override
	public List<EscursioneDTO> getAllEscursioneDTO() {
		List<EscursioneDTO> escursioniDTO = new ArrayList<EscursioneDTO>();
		List<Escursion> escursions = getAllEscursions();

		for (Escursion e : escursions)
			escursioniDTO.add(ConvertDTO.convertToEscursioneDTO(e));

		return escursioniDTO;
	}

	@Override
	public List<EscursioneDTO> getEscursioneDTODateCity(EscursioneDTO escursione) {

		List<EscursioneDTO> escursioniDTO = new ArrayList<EscursioneDTO>();

		List<Escursion> escursions = em
				.createNamedQuery(Escursion.FIND_DATE_CITY, Escursion.class)
				.setParameter("dataInizio", escursione.getDataInizio())
				.setParameter("citta", escursione.getCitta()).getResultList();
		;

		for (Escursion e : escursions) {
			escursioniDTO.add(ConvertDTO.convertToEscursioneDTO(e));

		}

		return escursioniDTO;
	}
	
	@Override
	public List<EscursioneDTO> getEscursioneDTOInDateCity(Date dataInizio , Date dataFine , String city) {

		List<EscursioneDTO> escursioniDTO = new ArrayList<EscursioneDTO>();

		List<Escursion> escursions = em
				.createNamedQuery(Escursion.FIND_INDATE_BYCITY, Escursion.class)
				.setParameter("dataInizio", dataInizio)
				.setParameter("dataFine", dataFine)
				.setParameter("citta", city).getResultList();
		
		for (Escursion e : escursions) {
			escursioniDTO.add(ConvertDTO.convertToEscursioneDTO(e));

		}

		return escursioniDTO;
	}

	@Override
	public List<EscursioneDTO> getEscursioneDTODate(EscursioneDTO escursione) {

		// System.out.println("DTO passato: " + volo.toString());

		List<EscursioneDTO> escursioniDTO = new ArrayList<EscursioneDTO>();

		List<Escursion> escursions = em
				.createNamedQuery(Escursion.FIND_DATE, Escursion.class)
				.setParameter("dataInizio", escursione.getDataInizio())
				.getResultList();
		;

		for (Escursion e : escursions) {
			escursioniDTO.add(ConvertDTO.convertToEscursioneDTO(e));

		}

		return escursioniDTO;
	}

	@Override
	public EscursioneDTO getEscursioneDTOById(int idEscursione) {
		return ConvertDTO.convertToEscursioneDTO(em.find(Escursion.class, idEscursione));
	}

}
